package binary_tree.LeetCode;

/**
 * 判断是否包含子树
 * root和subRoot就是相同的树||root.left中包含subRoot||root.right中包含sunRoot
 */
public class Num572 {
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if (root==null&&subRoot==null){
            return false;
        }
        if (root==null||subRoot==null){
            return false;
        }
        //root和subRoot就是相同的树||root.left中包含subRoot||root.right中包含sunRoot
        return isSameTree(root, subRoot)||isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
    }

    public boolean isSameTree(TreeNode p, TreeNode q) {
        //两个二叉树都为空
        if (p==null&&q==null){
            return true;
        }
        //两个二叉树有一个为空
        if (p==null||q==null){
            return false;
        }
        //此时两个二叉树都不为空
        //先比较根节点的值是否相同
        //如果根节点相同，接下来左子树和右子树的判断交给子函数处理
        return p.val==q.val&&isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }
}
